from flask import Blueprint, render_template, redirect, url_for, flash, request
from flask_login import login_user, logout_user, current_user, login_required
from models import User, db
from forms import RegistrationForm, LoginForm

auth_bp = Blueprint('auth', __name__)

@auth_bp.route('/register', methods=['GET', 'POST'])
def register():
    # 如果当前用户已登录，则重定向到主页
    if current_user.is_authenticated:
        return redirect(url_for('home_bp.base'))  # 修正端点名
    
    # 创建注册表单
    form = RegistrationForm()
    # 如果表单验证通过
    if form.validate_on_submit():
        # 检查用户名是否已存在
        existing_user = User.query.filter_by(username=form.username.data).first()
        if existing_user:
            flash('用户名已存在', 'danger')
            return redirect(url_for('auth.register'))
        
        # 检查邮箱是否已存在 (添加此项)
        existing_email = User.query.filter_by(email=form.email.data).first()
        if existing_email:
            flash('该邮箱已被注册', 'danger')
            return redirect(url_for('auth.register'))
        
        # 检查手机号是否已存在 (添加此项)
        existing_phone = User.query.filter_by(phone=form.phone.data).first()
        if existing_phone:
            flash('该手机号已被注册', 'danger')
            return redirect(url_for('auth.register'))
        
        # 创建新用户
        user = User(
            username=form.username.data,
            email=form.email.data,
            phone=form.phone.data
        )
        # 设置密码
        user.set_password(form.password.data)
        # 添加到数据库
        db.session.add(user)
        db.session.commit()
        flash('注册成功！请登录。', 'success')
        return redirect(url_for('auth.login'))
    # 返回注册页面
    return render_template('auth/register.html', form=form)

@auth_bp.route('/login', methods=['GET', 'POST'])
def login():
    # 如果当前用户已经登录，则重定向到主页
    if current_user.is_authenticated:
        return redirect(url_for('home_bp.base'))  # 修正端点名
    
    # 创建登录表单
    form = LoginForm()
    # 如果表单验证通过
    if form.validate_on_submit():
        # 同时支持用户名和邮箱登录
        user = User.query.filter(
            (User.username == form.username.data) | 
            (User.email == form.username.data)
        ).first()
        
        # 如果用户存在且密码正确
        if user and user.check_password(form.password.data):
            # 登录用户
            login_user(user, remember=form.remember.data)
            # 重定向到base.html
            return redirect(url_for('home_bp.base'))
        else:
            # 如果用户不存在或密码错误，则显示错误信息
            flash('登录失败，用户名或密码错误', 'danger')
    # 渲染登录页面，并传递表单
    return render_template('auth/login.html', form=form)

@auth_bp.route('/logout')
@login_required
def logout():
    logout_user()
    flash('您已成功退出登录', 'success')
    return redirect(url_for('index'))  # 确保使用正确的端点
